前言

今天我们继续来讨论重新组织函数的重构手法.

正文

Introduce Explaining Variable(引入解释性变量)

示例

if((platform.toUpperCase().indexOf("MAC") > -1) && 
(browser.toUpperCase().indexOf("IE") > -1) && resize >0){
  // do something
}
//我们可以看到上面的表达式特别长, 也特别难以理解, 所以我们可以引入解释性变量来改写
final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
final boolean isIEBrowser = browser.toUpperCase().indexOf("IE") > -1;
final boolean wasResized = resize >0;
if(isMacOs && isIEBrowser && wasResized){
  //do something
}

解释

通过上面的示例就能发现, 当我们的表达式特变长会变得很难理解, 这时候引入解释性变量就能提高我们对程序的理解. 所以这是很重要的重构手法.

但是大家有没有发现, 如果我们把每个表达式语句变为函数是不是更好呢? 也就是运用 Extract Method. 示例如下:

private boolean isIEBrowser(){
  return browser.toUpperCase().indexOf("IE") > -1;
}
private boolean isMacOs(){
  return platform.toUpperCase().indexOf("MAC") > -1;
}
private boolean wasResized(){
  return resize >0;
}
if(isMacOs() && isIEBrowser() && wasResized()){
  //do something
}

我们发现使用Extract Method, 使得表达式能被整个类使用, 更具有通用性. 所以我认为, 能使用Extract Method就尽量使用, 当不能使用Extract Method, 才使用Introduce Explaining Variable, 这种方式最好!

Split Temporary Variable(分解临时变量)

示例

double temp = 2*(_heigh+_width);
System.out.println(temp);
temp = _height*_width;
System.out.println(temp);

//我们发现上面的temp变量含糊不清, 不够语义化, 对temp进行了两次赋值很容易让我们摸不着头脑, 所以我们应该更加语义化
final double perimeter = 2*(_heigh+_width);
System.out.println(temp);
final double area = _height*_width;
System.out.println(temp);

解释

当我们使用临时变量时, 应该只有两种情况可以无意义, 那就是:循环变量,结果收集变量.

如果你发现临时变量用来保存一段代码的运算结果, 以便稍后使用. 那么这种临时变量应该只能被赋值一次, 并且起一个语义化的名字. 如果不这么做就会使阅读者糊涂, 理解起来更费劲.

总结

今天我们又介绍了两种函数重构手法, 一个是Introduce Explaining Variable, 这个手法可以作为Extract Method的补充, 因为Extract Method更具有通用性. 另一个是Split Temporary Variable, 对临时变量取名应该语义化, 方便阅读者理解.

THE END
推荐文章
  • Argument of type '{ recursive: boolean; }' is not assignable to parameter of type 'boolean'

  • 解决OneDrive错误代码0x8004de44无法登录问题

  • 黄帝内经-第22篇-脏气法时论篇(1)

  • 图片的白色背景去掉,变成透明的

  • Taro使用阿里图标库Iconfont

  • 黄帝内经-第36篇-刺疟篇(2)

  • 使用docker构建php基础镜像

  • textarea禁止改变大小

评论 共0条
文本

名字

0字

链接

链接名称

https://example.com example.com

即将访问外部链接,请注意确认目标地址的安全性

下载

名字

安全提示

本站资源均来自网络收集,下载前请注意文件安全

文件资源

文件名称

文件描述

智能体

名字

0字

输出结果

0字

开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

0字

0字

2024年10月

0字

0字

新增

0字

0字

新增

0字

0字